//
//  CZUserAccoutModel.swift
//  XLWB009
//
//  Created by apple on 3/25/16.
//  Copyright © 2016 apple. All rights reserved.
//

import UIKit

class CZUserAccoutModel: NSObject {

    // 单例
    static let sharedInstance: CZUserAccoutModel = CZUserAccoutModel()
    
    private override init() {
        super.init()
        
        // 从沙盒里面加载账号
        userAccount = loadUserAccount()
    }
    
    // 账号的路径
    private let accountPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last!.stringByAppendingString("/account.plist")
    
    // 账号
    var userAccount: CZUserAccount?
    
    //判断是否登陆
    var userLogin:Bool{
        
        return userAccount != nil
    }
    
    /// 加载 access_token, post
    // 1.定义闭包 completion: (error: NSError?) -> ()
    func loadAccessToken(code: String, completion: (error: NSError?) -> ()) {
        // 获取accessToken的url
        let urlString = "https://api.weibo.com/oauth2/access_token"
        
        // 拼接参数
        let parameters = [
            "client_id" : client_id,
            "client_secret" : client_secret,
            "grant_type" : "authorization_code",
            "code" : code,
            "redirect_uri" : redirect_uri
        ]
        
        // 发送请求
        /*
        AFN.POST:
        1.请求的url地址
        2.请求参数
        */
        CZNxetWorkTool.sharedInstance.afnManager.POST(urlString, parameters: parameters, progress: nil, success: { (_, result) -> Void in // 1.NSURLSessionDataTask: task 2.响应结果
            print("result: \(result)")
            // 将accessToken保存起来,下次直接拿来用,省得用户每次进入都需要登录
            if let dict = result as? [String: AnyObject] {
                
                // 将网络返回的账号赋值给属性,别人直接访问属性
                self.userAccount = CZUserAccount(dict: dict)
                print("userAccount: \(self.userAccount)")
                
                /// 保存模型到沙盒
                self.saveUserAccount()
                
                // 2.通知控制器保存完成
                completion(error: nil)
            }
            }) { (_, error) -> Void in // 1.task 2.响应失败的原因
                // 2.通知控制器出现了错误
                completion(error: error)
        }
    }
    
    /// 保存模型到沙盒
    private func saveUserAccount() {
        if userAccount != nil {
            // 有账号才需要保存
            print("accountPath: \(accountPath)")
            NSKeyedArchiver.archiveRootObject(userAccount!, toFile: accountPath)
        }
    }
    
    /// 从沙盒加载数据
    private func loadUserAccount() -> CZUserAccount? {
        let userAccount = NSKeyedUnarchiver.unarchiveObjectWithFile(accountPath) as? CZUserAccount
        
        // 如果加载出账号,需要判断accessToken是否过期
        // userAccount?.expiresDate和当前时间判断
        // NSDate()
        // userAccount?.expiresDate > NSDate() 表示没有过期
        // 测试过期时间1.让服务器返回一个过期时间来测试 2.改模拟器时间 3.重新给userAccount?.expiresDate?赋值
        // userAccount?.expiresDate = NSDate(timeIntervalSinceNow: -1000)
        if userAccount != nil && userAccount?.expiresDate?.compare(NSDate()) == NSComparisonResult.OrderedDescending {
            print("userAccount: \(userAccount)")
            return userAccount
        }
        
        return nil
    }
}
